package com.inpion.board.logic;

import com.inpion.board.criteria.BoardCriteria;
import com.inpion.board.entity.Board;
import com.inpion.board.entity.BoardItem;
import com.inpion.board.entity.Label;
import com.inpion.framework.util.Paging;

public interface BoardLogic {
	
	/**
	 * 새로운 게시판을 생성한다.
	 * @param board 게시판 내역
	 * @return 게시판번호
	 */
	String createBoard(Board board);
	
	/**
	 * 게시판을 조회한다.
	 * @param boardNo 게시판번호
	 * @return 게시판내역
	 */
	Board getBoard(String boardNo);
	
	/**
	 * 게시판에 레이블을 생성한다.
	 * @param label 레이블 내역
	 * @return
	 */
	String createLabel(Label label);

	/**
	 * 새로운 게시물을 생성한다.
	 * @param boardItem 게시물
	 * @return 생성된 게시물번호
	 */
	String createBoardItem(BoardItem boardItem);
	
	/**
	 * 게시물 목록을 조회한다.
	 * @param criteria 조회조건
	 * @return 게시물 목록
	 */
	Paging<BoardItem> getBoardItems(BoardCriteria criteria);
	
	/**
	 * 게시물을 삭제한다.<br />
	 * 책임#1. 게시물 작성자가 아니면 삭제할 수 없다.
	 * @param boardItemNo 게시물번호
	 * @param userNo 사용자번호
	 */
	void removeBoardItem(String boardItemNo, String userNo);
	
}
